/**
 * @author 善良的YWJ
 * @Created by shanliangdeYWJ on 2020/11/29 12:22:58
 * @file index.js
 * @description
 * ```
 * 主文件
 * ```
 * @link [Github](https://github.com/shanliangdeYWJ)
 */

; (function (doc, initTools, initCompute) { // 立即执行函数传入形参
    /** 
     * @global
     * @type {HTMLCollectionOf<Element>} 计算器 dom 元素
     */
    var oCalculator = doc.getElementsByClassName('J_calculator')[0],
        /** 
         * @global
         * @type {HTMLCollectionOf<Element>} 计算器输出结果标签 dom 元素
         */
        oResult = oCalculator.getElementsByClassName('result')[0],
        /** 
         * @global
         * @type {HTMLInputElement} 计算器第一个输入值标签 dom 元素
         */
        oInputs = oCalculator.getElementsByTagName('input'),
        /** 
         * @global
         * @type {HTMLCollectionOf<Element>} 计算器按钮组标签 dom 元素 
         */
        oBtnGroup = oCalculator.getElementsByClassName('btn-group')[0];

    console.log(oCalculator,
        oResult,
        oInputs,
        oBtnGroup);

    /**
     * 管理模块执行
     * @global
     * @description 
     * ```
     * init();
     * ```
     */
    var init = function () {
        bindEvent();
    };

    /**
     * 包裹绑定事件处理函数，防止暴露在独立作用于最外面
     * @global
     * @description
     * ```js
     * bindEvent();
     * ```
     */
    function bindEvent() {
        oBtnGroup.addEventListener('click', oBtnClick, false);
    }

    /**
     * 点击事件
     * @global
     * @param {Event} ev 事件对象
     */
    function oBtnClick(ev) {
        var tar = initTools.getTarget(ev),
            tagName = tar.tagName.toLowerCase();

        if (tagName === 'button') {
            var method = tar.getAttribute('data-method'),
                fVal = initTools.digitalize(oInputs[0].value),
                sVal = initTools.digitalize(oInputs[1].value);

            renderResult(initCompute[method](fVal, sVal));
        }
    }

    /**
     * 渲染结果函数
     * @global
     * @param {string|number} result 需要渲染的内容
     */
    function renderResult(result) {
        oResult.innerText = result;
    }

    init();
})(document, initTools, initCompute); // 立即执行函数的实参

// // 事件处理函数,button 的父级绑定事件处理函数可以通过事件对象，和事件原对象找到 button， 知识点：事件捕获，事件冒泡
// oBtnGroup.addEventListener('click', oBtnClick, false);

// /**
//  * 按钮父盒子绑定点击事件对象
//  * @param {Event} ev 事件
//  */
// function oBtnClick(ev) {
//     var e = ev || window.event,
//         tar = e.target || e.srcElement,
//         tagName = tar.tagName.toLowerCase();
//     if (tagName === 'button') {
//         var method = tar.getAttribute('data-method');
//         console.log(method);
//         fVal = Number(fInput.value.replace(/\s+/g, '')) || 0;
//         sVal = Number(sInput.value.replace(/\s+/g, '')) || 0;

//         switch (method) {
//             case 'plus': oResult.innerText = fVal + sVal; break;
//             case 'minus': oResult.innerText = fVal - sVal; break;
//             case 'mul': oResult.innerText = fVal * sVal; break;
//             case 'div': oResult.innerText = fVal / sVal; break;
//             default: break;
//         }
//     }
// }